/*
 * @Description: 数据处理
 * @Autor: 蔡英兰
 * @Date: 2023-05-22 10:37:31
 * @LastEditors: 蔡英兰
 * @LastEditTime: 2023-12-01 18:11:05
 */

// 通过最后一级查询父级路径
// options（Array）: 原数组
// checkList（Array）： 选中的keys
// isMultiple（Boolean）：是否多选 （isMultiple： true时： 返回的值为多维数组）
// isInfinity（Boolean）: 展开数组成为1为数组 ,并去重
export function cascadeLoads(options, checkList, isMultiple, isInfinity) {
  let cascadeData = [];
  if(!checkList.length) return []
  checkList.forEach((check) => {
    let selectSubsidiaryDepartment = isMultiple ? [cascadeDisplay(options, check)] : cascadeDisplay(options, check);
    cascadeData.push(...selectSubsidiaryDepartment);
  });
  return isInfinity ? Array.from(new Set(cascadeData.flat(Infinity))) : cascadeData;
}
function cascadeDisplay(object, value) {
  for (var key in object) {
    if (object[key].id == value) return [object[key].id];
    if (object[key].children && Object.keys(object[key].children).length > 0) {
      var temp = cascadeDisplay(object[key].children, value);
      if (temp) return [object[key].id, temp].flat();
    }
  }
}

export function dataOptions(options, labelKey='name', valueKey='id', othertKey=[]) {
  return options?.map(item => {
    const obj = {}
    if(item instanceof Object) {
      obj.label = item[labelKey]
      obj.value = item[valueKey]
      othertKey.forEach(key=> {
        obj[key] = item[key]
      })
    } else {
      obj.label = item
      obj.value = item
    }
    return obj
  }) || []
}


// 级联回显时，得必须按照数据的顺序渲染，要不然删除时对应不上
// checkedList：选中的集合
// options：原始数据
var reSortData = [] // 临时保存的返回数据
export function reSortCheckedCascader(checkedList, options) {
  const key = mapData(checkedList, options)
  reSortData = []
  return key
}
function mapData(checkedList, options) {
  // const keyList = checkedList.filter(i => reSortData.includes(i) == false)
  options?.forEach(item => {
    if(item.children?.length) {
      mapData(checkedList, item.children)
      return
    }
    checkedList.forEach(checked => {
      if(checked === item.id) reSortData.push(checked)
    })
  })
  return reSortData
}
